const moment=require('moment')
const info=require('./info')
const axios=require('axios')
const log=require('./log4js')

const instance = axios.create({
    timeout: 0,
    contentType: 'application/json',
    responseType: 'json'
})
module.exports={

    //获取天气
    async getWeather(city = '杭州') {
        const defaultTemplate={
            city,
            wea: '未知',
            tem: '未知',
            tem1: '未知',
            tem2: '未知',
            win: '未知',
            win_speed: '未知'
         }  
        const url = 'https://www.tianqiapi.com/api?unescape=1&version=v6&appid=' + info.weather.appid + '&appsecret=' + info.weather.appsecret + '&city=' + encodeURI(city);
        const result = await instance.get(url)
        .then(({data})=>data)
        .catch(()=>defaultTemplate)
        return result;
    },
    //获取 距离 下次生日还有多少天
    getbirthday() {
        const birthday = info.time.birthDay;
        // 获取当前时间戳
        const now = moment(moment().format('YYYY-MM-DD')).valueOf();
        // 获取纪念日 月-日
        const mmdd = moment(birthday).format('-MM-DD');
        // 获取当年
        const y = moment().year();
        // 获取今年生日 时间戳
        const nowTimeNumber = moment(y + mmdd).valueOf();
        // 判断 生日 有没有过，如果已经过去（now>nowTimeNumber），resultBirthday日期为明年的生日 日期
        // 如果还没到，则 结束日期为今年的目标日期
        let resultBirthday = nowTimeNumber;
        if (now > nowTimeNumber) {
          // 获取明年目标日期
          resultBirthday = y + 1+mmdd;
        }
        return moment(moment(resultBirthday).format()).diff(moment(now).format(), 'day');
    },
    //获取 相恋天数
    getLoveDay() {
        const loveDay = info.time.love;
        return moment(moment().format('YYYY-MM-DD')).diff(loveDay, 'day');
    },
    //获取 相恋几年了
    getLoveYear() {
        const loveDay = info.time.love;
        return moment().year() - moment(loveDay).year();
    },
    //获取是第几个生日
    getBirthYear() {
        const birthYear = info.time.birthYear;
        return moment().year() - birthYear;
    },
    //获取 每日一句
    async getOneSentence() {
        const url = 'https://v1.hitokoto.cn/';
        let result=await instance.get(url)
        .then(({data}) => data.hitokoto)
        .catch(()=>'今日只有我爱你！');
        return result;
    },
    //获取时间日期
    getDatetime() {
        const week = {
          1: '星期一',
          2: '星期二',
          3: '星期三',
          4: '星期四',
          5: '星期五',
          6: '星期六',
          0: '星期日',
        };
        return moment().format('YYYY年MM月DD日 ') + week[moment().weekday()];
    },
    //发送模板消息
    async toWechart() {
        // 模板消息接口文档
        const token=await this.getToken();
        const data=await this.getTemplateData();
        const openIds=await this.getOpenIds(token);
        log.info("('--------------开始发送每日提醒-------------------");
        log.info(openIds);
        if(!openIds){
          return;
        }
        openIds.forEach(openId=>{
          data.touser =openId;
          const url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=' + token;
          instance.post(url, data).then(res => log.info("发送给openId",res.status,res.statusText));
        })
        log.info("('--------------完成发送每日提醒-------------------");
    },
    //获取Access token
    async getToken() {
        const url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + info.weChat.appid + '&secret=' + info.weChat.appsecret;
        return await instance.get(url)
        .then(({data})=>data.access_token)
        .catch((e)=> {
          log.error("获取Access token",e.message);
        })
    },
    //获取关注者
    async getOpenIds(token) {
      const url = 'https://api.weixin.qq.com/cgi-bin/user/get?access_token=' + token;
      return await instance.get(url)
      .then(({data})=>{
        return data.data.openid
      })
      .catch((e)=> {
        log.error("获取关注者",e.message);
      })
  },
    //组装模板消息数据
    async getTemplateData() {
        // 判断所需 模板
        // 发工资模板 getWageDay == 0       wageDay
        // 结婚纪念日模板 getMarryDay == 0  marry
        // 生日 模板 getbirthday == 0       birthday
        // 正常模板                         daily
    
        const birthday = this.getbirthday();
        const data = {
          topcolor: '#FF0000',
          data: {},
        };
        if (!birthday) {
          // 生日模板
          data.template_id = info.weChat.birthday;
          data.data = {
            dateTime: {
              value: this.getDatetime(),
              color: '#cc33cc',
            },
            individual: {
              value: this.getBirthYear(),
              color: '#ff3399',
            },
          };
        } else {
          // 正常模板
          data.template_id = info.weChat.daily;
          // 获取天气
          const getWeather = await this.getWeather();
          // 获取每日一句
          const message = await this.getOneSentence();
          data.data = {
            dateTime: {
              value: this.getDatetime(),
              color: '#cc33cc',
            },
            love: {
              value: this.getLoveDay(),
              color: '#ff3399',
            },
            birthday: {
              value: birthday,
              color: '#ff0033',
            },
            wea: {
              value: getWeather.wea,
              color: '#33ff33',
            },
            tem: {
              value: getWeather.tem,
              color: '#0066ff',
            },
            airLevel: {
              value: getWeather.air_level,
              color: '#ff0033',
            },
            tem1: {
              value: getWeather.tem1,
              color: '#ff0000',
            },
            tem2: {
              value: getWeather.tem2,
              color: '#33ff33',
            },
            win: {
              value: getWeather.win,
              color: '#3399ff',
            },
            message: {
              value: message,
              color: '#8C8C8C',
            },
          };
        }
        return data;
    }
}